
#ifndef  _TD_FADESCREEN_H_
#define  _TD_FADESCREEN_H_


/************************************************************************/
/* SDL                                                                  */
/************************************************************************/
#include "SDL/SDL.h"

/************************************************************************/
/* Core                                                                 */
/************************************************************************/
#include "Core/BaseEntity.h"
#include "Game/GameCore.h"

/************************************************************************/
/* STL                                                                  */
/************************************************************************/
#include <exception>

using namespace std;
using namespace TD_Core;

namespace TD_GUI {


	class Fadescreen {

		SDL_Surface *m_pFadingScreen;
		float m_fadeVelocity;
		bool m_isFinished;
		int m_alphaChannel;
		bool m_isFadingIn;
		bool m_isFadingOut;
		SDL_Rect m_offset;
		float m_displacement;

		/************************************************************************/
		/* Private functionalities                                              */
		/************************************************************************/

		void initFadescreen();

		void update(unsigned int deltaTime);
	public:

		/************************************************************************/
		/* ctors and dtors					                                    */
		/************************************************************************/

		//Default constructor
		explicit Fadescreen();

		//Copy constructor
		explicit Fadescreen(const Fadescreen &rhs);

		//Assignment constructor
		Fadescreen& operator=(const Fadescreen &rhs);

		//Destructor
		~Fadescreen();


		/************************************************************************/
		/* Access functions                                                     */
		/************************************************************************/
		inline bool isFadingOut() const{
			return(m_isFadingOut);
		}

		inline bool isFadingIn() const {
			return(m_isFadingIn);
		}

		inline bool finishedFading()const {
			return(m_isFinished);
		}
		/************************************************************************/
		/* Functionalities                                                      */
		/************************************************************************/
		void startFadeIn(float fadeVelocity);

		void startFadeOut(float fadeVelocity);

		

		void render(SDL_Surface *g_pSurface, unsigned int deltaTime);

	};
}


#endif